﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Aprendete.Models
{
    public class TutoriaRepository
    {


        private DataClasses1DataContext db = new DataClasses1DataContext();

        public void Add(Tutoria Tutoria)
        {
            db.Tutorias.InsertOnSubmit(Tutoria);
            Save();
        }

        public void Save()
        {
            db.SubmitChanges();
        }
        
        public Tutoria GetTutoriaxid(int id)
        {
            return db.Tutorias.SingleOrDefault(d => d.TutoriaID == id);
        }

        public bool Delete(Tutoria Tutoria)
        {
            try
            {
                db.Tutorias.DeleteOnSubmit(Tutoria);
                db.SubmitChanges();
                return true;
            }

            catch (Exception e)
            {
                return false;
            }
        }
     
        /// <summary>
        /// Retorna todas las tutorías que estan programadas (con fecha posterior a la actual)
        /// </summary>
        /// <returns>Lista de tutorias</returns>
        public List<Tutoria> GetTutoriasProgramadas()
        {
            List<Tutoria> retorno = db.Tutorias.Where(d => (d.Fecha.CompareTo(System.DateTime.Now) >= 0)).ToList<Tutoria>();
            return retorno;

        }

        /// <summary>
        /// Updatea el tutor de la tutoría
        /// </summary>
        /// <param name="id">tutor id</param>
        /// <param name="tutoid">id de la tutoría</param>
        public void EditTutor(int id, int tutoid)
        {
            Tutoria t = GetTutoriaxid(tutoid);
            t.ProfesorID=id;
            Save();
            
        }

        /// <summary>
        /// Marca una tutoría como realizada
        /// </summary>
        /// <param name="tutoid"></param>
        public void MarcarRealizada(int tutoid)
        {
            Tutoria t = GetTutoriaxid(tutoid);
            t.Realizada = true;
            Save();
        }

        /// <summary>
        /// Updatea la sala de la tutoría
        /// </summary>
        /// <param name="id">id de la sala</param>
        /// <param name="tutoid">id de la tutoría</param>
        public void EditSala(int id,int tutoid)
        {
            Tutoria t = GetTutoriaxid(tutoid);
            t.SalaID=id;
            Save();
        }

        /// <summary>
        /// Updatea la cantidad de usuarios maximos
        ///
        /// </summary>
        /// <param name="id">cantidad de usuarios maximos</param>
        /// <param name="tutoid">id de la tutoría</param>
        public void EditUsuariosMaximos(int id, int tutoid)
        {
            Tutoria t = GetTutoriaxid(tutoid);
            t.UsuariosMax = id;
            Save();
        }

        /// <summary>
        /// Updatea la fecha de una tutoría
        /// </summary>
        /// <param name="fech">fecha en formato DateTime</param>
        /// <param name="tutoid">id de la tutoría</param>
        public void EditFecha(DateTime fech, int tutoid)
        {
            Tutoria t = GetTutoriaxid(tutoid);
            t.Fecha = fech;
            Save();
        }

        /// <summary>
        /// Retorna todas las tutorias no realizadas.
        /// </summary>
        /// <returns></returns>
        public List<Tutoria> TutoriasNoRealizadas()
        {
            return db.Tutorias.Where(d => (d.Fecha.CompareTo(System.DateTime.Now) > 0)).ToList<Tutoria>();            
        }

        /// <summary>
        /// Retorna una lista con todas las tutorías que han sido solicitadas y que no han sido adjudicadas
        /// </summary>
        /// <returns></returns>
        public List<Tutoria> GetTutoriasSolicitadas()
        {
            List<Tutoria> retorno = db.Tutorias.Where(d => (d.Fecha == new DateTime(0, 0, 0))).ToList<Tutoria>();
            return retorno;
        }


        /// <summary>
        /// Retorna una lista con todas las tutorías del Usuario usuario, si bool antiguas es true muestra también las de fechas pasadas.
        /// </summary>
        /// <returns></returns>
        public List<Tutoria> GetTutoriasUsuario(Usuario usuario)
        {


            try
            {
                return db.Tutorias.Where(d => (d.Usuario.UsuarioID == usuario.UsuarioID)).ToList<Tutoria>();

                
            }
            catch
            {
                return new List<Tutoria>();
            }
            
        }


        public List<Tutoria> Tutorias()
        {

            try
            {
                return db.Tutorias.Where(d => (d.Fecha.CompareTo(DateTime.Now) == 1) && !d.Realizada).ToList<Tutoria>();

            }
            catch
            {
                return new List<Tutoria>();
            }


            
        }



        /// <summary>
        /// Retorna una lista con todas las tutorías en que el Usuario usuario está inscrito.
        /// </summary>
        /// <returns></returns>
        public List<Tutoria> GetTutoriasInscritas(Usuario usuario)
        {


            try
            {
                List<Inscrito> lista = new InscritoRepository().GetInscripcionesUsuario(usuario.UsuarioID);

                List<Tutoria> retorno = new List<Tutoria>();

                foreach (Inscrito I in lista)
                {
                    Tutoria T = db.Tutorias.Single(d => (d.TutoriaID == I.TutoriaID));

                    retorno.Add(T);
                }


                return retorno;


            }
            catch
            {
                return new List<Tutoria>();
            }

        }
    }

}